// NOTE: 产生了多态的中： 早绑定
#include <iostream>
using namespace std;

class Shape
{
protected:
  int width, height;

public:
  Shape(int a = 0, int b = 0)
  {
    width = a;
    height = b;
  }
  int area()
  {
    cout << "父类： Shape Parent class area :" << endl;
    return 0;
  }
};

class Rectangle : public Shape
{
public:
  Rectangle(int a = 0, int b = 0) : Shape(a, b) {}
  int area()
  {
    cout << "调用 Rectangle class area :" << endl;
    return (width * height);
  }
};

class Triangle : public Shape
{
public:
  Triangle(int a = 0, int b = 0) : Shape(a, b)
  {
    // todo
  }
  int area()
  {
    cout << "调用： Triangle class area :" << endl;
    return (width * height / 2);
  }
};

// 程序的主函数
int main()
{
  Shape *shape;
  Rectangle rec(10, 7);
  Triangle tri(10, 5);

  // NOTE: 存储矩形的地址
  shape = &rec;
  // NOTE: 调用矩形的求面积函数 area
  shape->area(); // NOTE: 这里实际上还是调用的 Shape 类的 area 方法

  // NOTE: 存储三角形的地址
  shape = &tri;
  // NOTE: 调用三角形的求面积函数 area
  shape->area();

  return 0;
}